package com.shrcl.engineerprocess.domain.events;

import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerCapability;
import com.shrcl.engineerprocess.domain.EngineerCertification;
import com.shrcl.engineerprocess.domain.EngineerLevel;
import com.shrcl.engineerprocess.domain.EngineerMonthlyCost;
import edu.fudan.mylang.pf.event.IEntityEventsListner;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

public interface EngineerEventsListener extends IEntityEventsListner<Engineer> {
  public abstract void leave(final Engineer entity);
  
  public abstract void reactive(final Engineer entity);
  
  public abstract void addCapability(final Engineer entity, final Procedure1<? super EngineerCapability> init);
  
  public abstract void addCertification(final Engineer entity, final Procedure1<? super EngineerCertification> init);
  
  public abstract void removeCapability(final Engineer entity, final EngineerCapability engineerCapability);
  
  public abstract void removeCertification(final Engineer entity, final EngineerCertification engineerCertification);
  
  public abstract void addMonthlyCost(final Engineer entity, final Procedure1<? super EngineerMonthlyCost> init);
  
  public abstract void removeMonthlyCost(final Engineer entity, final EngineerMonthlyCost monthlyCost);
  
  public abstract void updateEngineerLevels(final Engineer entity, final Collection<EngineerLevel> levels);
  
  public abstract void monthlyCostTimer(final Engineer entity);
}
